<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./react/react.development.js"></script>
    <script src="./react/react-dom.development.js"></script>
    <script src="./react/babel.min.js"></script>
    <script src="./react/prop-types.js"></script>
    <script src="./react/lodash.min.js"></script>
    <script src="./react/immutable.min.js"></script>

</head>
<body>
<div id="app"></div>
<script type="text/babel">

    let app = document.querySelector('#app');

    let root = ReactDOM.createRoot(app);

    function withMouseXY(WithComponent){
        return class extends React.Component {
            state = {
                x: 0,
                y: 0
            }
            componentDidMount = () => {
                document.addEventListener('mousemove', this.move)
            }
            componentWillUnmount = () => {
                document.removeEventListener('mousemove', this.move)
            }
            move = (ev) => {
                this.setState({
                    x: ev.pageX,
                    y: ev.pageY
                })
            }
            render(){
                return <WithComponent {...this.state} />
            }
        }
    }

    class Welcome extends React.Component {
        render(){
            return (
                <div>
                    hello world, { this.props.x }, { this.props.y }
                </div>
            );
        }
    }

    const MouseWelcome = withMouseXY(Welcome)

    let element = (
        <MouseWelcome />
    );

    root.render(element);

</script>
</body>
</html>